package com.ytb.utils;

import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
@Slf4j
public class loginUtils {
    @Value("${wxmini.appid}")
    private static String appid;
    @Value("${wxmini.secret}")
    private static String secret;

    /**
     * 微信登陆，通过code获取session_key、openid。
     *     session_key：用于解密 前端wx.getUserProfile(以前是wx.getUserInfo)接口 返回的加密的用户数据，头像、昵称、性别、地区等信息（2022-11，微信已弃用该接口，已无法通过其获取用户信息）。
     *     openid：用户的身份标识，每个用户在每个公众号或者小程序中都有一个唯一openid，跨公众号/小程序时openid不相同。若想在公众号、小程序、开放平台等地方使用不同账号，则使用openid作为用户标识。
     *
     * @param code 通过wx.login获取到的用户的code（登录凭证）
     * @return 返回session_key、openid、isSuccess，通过isSuccess是否为true来判断是否成功获取到session_key、openid。
     *         示例：{"session_key":"VtyIGnq9U2E8c95XUm2SeQ==","openid":"o60_YvksCvHRpajcmiLVAUYybXcM","isSuccess":"false"}
     */
    public static String getSessionKeyByWX(String code) {

        String appid = "wx37860c1824a279d5";
        String secret = "a74a66d72f410a47e07269c435f7384e";
        String baseUrl = "https://api.weixin.qq.com/sns/jscode2session?appid=" + appid + "&secret=" + secret + "&js_code=" + code + "&grant_type=authorization_code";
        log.info("---微信登陆，通过code获取sessionkey");
        log.info("---baseUrl ="+baseUrl);
        //使用 hutool 发起get请求
        //基于JDK的HttpUrlConnection封装
        String result = HttpUtil.get(baseUrl);
        log.info("---拿到GET结果 ="+result);
        //使用 hutool 解析json
        JSONObject jsonObject = JSONUtil.parseObj(result);
        if(!jsonObject.isNull("session_key")) {
            //成功获取到session_key等数据
            return result.substring(0,result.length()-1)+",\"isSuccess\":\"true\"}";
        }else {
            //失败，没获取到session_key等数据
            return "{\"session_key\":\"\",\"openid\":\"\",\"isSuccess\":\"false\"}";
        }
    }


    /**
     * 微信登陆，通过code获取session_key
     * @param code 通过wx.login获取到的用户的code（登录凭证）
     * @return 返回session_key，用于解密 前端wx.getUserProfile接口 返回的加密的用户数据（2022-11，微信已弃用该接口，已无法通过其获取用户信息）。
     */
    public static Result<String> getSessionKey(String code) {
        //使用 hutool 解析json
        JSONObject json = JSONUtil.parseObj(getSessionKeyByWX(code));
        if(json.getBool("isSuccess")) {
            log.info("isSuccess = true，成功获取到session_key。session_key = "+json.getStr("session_key"));
            return Result.SUCCESS(json.getStr("session_key"));
        }else {
            // 记录日志
            log.error("获取sessionkey失败! code = "+code);
            return Result.FAIL("获取sessionkey失败! code = "+code);
        }
    }

}
